iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
自我挑戰組

技術隨筆系列 第 17

linux 的信任基石 - GPG (GNU Privacy Guard)

  • 分享至 

  • xImage
  •  

Linux 透過 GPG(GNU Privacy Guard)建立了一套基於加密的信任系統,確保軟體包的完整性與來源的可信度。以下是它如何運作的主要機制:

  1. GPG 密鑰對:

GPG 基於公開密鑰加密(Public Key Cryptography),其中有兩組密鑰:

  • 私鑰(Private Key):只能由密鑰擁有者保密持有,用來加密訊息或者簽署訊息。
  • 公開鑰(Public Key):可以公開分發,讓其他人使用來驗證簽名或加密訊息。

在軟體包管理中,套件來源(repository)擁有自己的 GPG 私鑰與公開鑰,並利用私鑰簽署他們的軟體包,公開鑰則用於讓客戶端(如 Ubuntu 系統)驗證簽名。

  1. 簽署軟體包:

每個套件來源都會使用其私鑰對軟體包進行簽署。簽署是一種將原始資料(例如軟體包的摘要)與私鑰進行運算,生成的簽章(signature)可以唯一識別該包,並保證內容沒有被竄改。當套件來源簽署軟體包時,它同時會提供簽章文件。

  1. 公開鑰驗證:

當你在 Linux 系統上安裝新軟體或更新套件時,系統中的套件管理器(如 apt)會執行以下驗證:

  • 下載公開鑰:從可信任的來源下載存儲庫的 GPG 公開鑰,並存放在系統的鑰匙環(keyring)中,通常在 /usr/share/keyrings//etc/apt/trusted.gpg.d/
  • 驗證簽章:套件管理器會用該公開鑰來驗證軟體包簽章。若簽章能被正確驗證,說明軟體包是由該公開鑰所對應的私鑰擁有者簽署,且內容未被竄改。
  1. 建立信任關係:

信任是透過 GPG 金鑰鏈(keyring)來維護的。當你將公開鑰導入系統的 keyring 時,表示你信任該鑰對應的私鑰擁有者。此信任關係確保了你下載的軟體來自可信任的來源。

  1. 套件來源與鑰匙環的分離:

在新的 Linux 安全最佳實踐中,每個套件來源的公開鑰都被儲存在獨立的 .gpg 檔案中,並且在 /etc/apt/sources.list.d/ 中每個 .list 檔案都指向對應的公開鑰,增加了可信任性。這種隔離機制確保不同套件來源之間不會相互干擾,並減少公開鑰被濫用的風險。

  1. 公開鑰的輪替與更新:

鑰匙可能會有過期、被撤銷或輪替的情況。套件管理器有能力檢查這些狀態。當公開鑰不再有效時,需要使用新的鑰來重新驗證,確保系統一直信任最新的密鑰。

透過這樣的機制,Linux 能有效地保證從套件來源下載的軟體包是完整且來自可信的來源,防止中間人攻擊和惡意軟體的注入。


延伸閱讀:使用 GnuPG 確保傳輸重要檔案或文件的過程能確保機密性與完整性 | The Will Will Web

在 Linux 發行版使用的信任系統:

  1. Debian 和 Ubuntu:這兩個發行版以及基於它們的變體(如 Linux Mint、Kubuntu、Pop!_OS)都使用 GPG 來簽署並驗證軟體包和套件來源。
  2. Fedora:Fedora 使用 GPG 來簽署 RPM 軟體包,確保每個軟體包的完整性。
  3. Red Hat Enterprise Linux (RHEL) 和 CentOS:作為 Fedora 的衍生,這些發行版也採用 GPG 來驗證 RPM 軟體包和套件來源。
  4. Arch Linux:Arch Linux 使用 pacman 作為套件管理器,並依賴 GPG 來驗證軟體包的完整性。
  5. OpenSUSE:OpenSUSE 同樣使用 GPG 來確保軟體包的安全。
  6. 其他 Linux 發行版:
    大多數基於 .deb.rpm 軟體包的發行版都使用 GPG 或類似的簽署機制來建立信任系統。

其他 OS 的信任系統

  1. FreeBSD 和 OpenBSD: 這些 BSD 發行版有自己的套件管理工具(如 pkg),並使用 PGP/GPG 簽署來保護軟體包。FreeBSD 的 pkg 工具與 Linux 的 aptyum 類似,並提供套件簽署與驗證功能。

  2. macOS:

  • Apple 签署:macOS 使用 Apple 的簽署機制來確保系統應用程式和第三方軟體的完整性。通過 App Store 發佈的應用都需要經過 Apple 的簽署和審核。
  • Gatekeeper:macOS 引入了 Gatekeeper 功能,限制未簽署或不受信任的應用執行,並使用 Apple 開發者簽署的方式來建立信任。
  1. Windows:
  • Microsoft 簽署與 Authenticode:Windows 使用 Authenticode 機制來簽署 .exe、.msi、.dll 等可執行檔案,並建立一個信任鏈。Microsoft 使用其自有的數字簽署和證書來確保軟體的來源。
  • Windows Package Manager (winget):新的 Windows 套件管理器 winget 也開始引入軟體包的簽署機制,驗證來源的安全性。
  1. Android: Android 使用 APK 簽署機制。每個 APK 文件都必須由開發者的簽署金鑰進行簽署,並在安裝時由系統驗證簽署的完整性。Google Play Protect 進一步加強了應用的安全性。

  2. iOS: iOS 具有非常嚴格的簽署和審核機制。所有應用必須通過 Apple 開發者帳號簽署,並在上架 App Store 之前經過審核。這保證了應用的完整性與安全性,並避免不受信任的軟體執行。


上一篇
在 linux 中新增信任的套件來源
下一篇
使用 asc 驗證檔案來源
系列文
技術隨筆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言